package com.sob.bountyhunter.entidades;

import java.awt.Rectangle;
import java.util.Random;

import org.newdawn.slick.Animation;
import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.util.pathfinding.Path;
import org.newdawn.slick.util.pathfinding.AStarPathFinder;

import com.sob.bountyhunter.Mapa;

public class Mob extends Entidad{
	
	private int xMargen = 2;
	private int yMargen = 2;
	
	
	public Mob(String sf) throws SlickException 
	{
		super(sf);
		cx=16;
		cy=55;
		xvel=0.1f;
		yvel=0.1f;
		tinte=new Color(Color.green);
	}

	/*
	public Mob(String sf, int sw, int sh, int time) throws SlickException 
	{
		super(sf, sw, sh, time);
		cx=16;
		cy=24;
		sprSize=1.9f;
		xvel=0.1f;
		yvel=0.1f;
		Random rnd=new Random();
		
		int r=rnd.nextInt(255);
		int g=rnd.nextInt(255);
		int b=rnd.nextInt(255);
		int alpha=255; //rnd.nextInt(255);
		tinte=new Color(r,g,b,alpha);

		
		for(Animation a: animacion){
			a.setSpeed(0.5f);
		}
		
	}*/
	public Mob() throws SlickException{
		super();
		
		cx=16;
		cy=24;
		sprSize=1.9f;
		xvel=0.1f;
		yvel=0.1f;

		Random rnd=new Random();
		
		int r=rnd.nextInt(255);
		int g=rnd.nextInt(255);
		int b=rnd.nextInt(255);
		int alpha=255; //rnd.nextInt(255);
		tinte=new Color(r,g,b,alpha);

	}
	
	@Override
	public Rectangle getCajaColision()
	{
		Rectangle r=null;
		
		r=new Rectangle( ((int)(x+cx)-16), ((int)(y+cy)-16), 32, 23);
		
		return r;
	}
	@Override
	public Rectangle getCajaColision(float px, float py)
	{
		Rectangle r=null;
		
		r=new Rectangle( ((int)(px+cx)-16), ((int)(py+cy)-16), 32, 23);
		
		return r;
	}
	
	public void update(GameContainer gameContainer, int deltaTime, Mapa map)
	{
		super.update(gameContainer, deltaTime, map);
		
		//Busca un jugador
		Jugador j=null;
		for(Entidad e: map.entidades){
			try{ 
				j=(Jugador)e;
				break; //Cuando lo encuentre para
			} 
			catch(Exception ex) {
				continue;
			}
		}
		
		if(j!=null) buscaCaminos(gameContainer,deltaTime,map, j);
		
		updateAnim=false;
		if(xinc<0) {
			dirAnim=1; 
			updateAnim=true;
		}else if(xinc>0){ 
			dirAnim=2; 
			updateAnim=true;
		}
		if(yinc<0){
			dirAnim=3; 
			updateAnim=true;
		}else if(yinc>0){
			dirAnim=0; 
			updateAnim=true;
		}
				
		/*
		//Si lo encontro
		if(j!=null){	
			//Si el jugador esta a la izquierda 
			if(j.x - x < -xMargen) {
				xinc=-(xvel*deltaTime);
			}
			//Si esta a la derecha
			else if (j.x - x > xMargen) { 
				xinc=+(xvel*deltaTime);
			}
			else { 
				xinc=0;
			}
			
			
			//Si el jugador esta arriba
			if(j.y - y < -yMargen) { 
				yinc=-(yvel*deltaTime);
			}
			//Si esta abajo
			else if (j.y - y > yMargen) { 
				yinc=+(yvel*deltaTime);
			}
			else { 
				yinc=0;
			}						
		}		*/
	}
	
	public void buscaCaminos(GameContainer gameContainer, int deltaTime, Mapa map, Entidad jug)
	{
		AStarPathFinder pFinder;
		
		pFinder=new AStarPathFinder(map,100,false);
		Path path=pFinder.findPath(this, getXTile(), getYTile(), jug.getXTile(), jug.getYTile());
		
		if(path!=null){
			
			if(path.getLength()>1){
			
			if( (path.getX(1)*Mapa.TILE_SIZE + Mapa.TILE_SIZE/2) - x < -xMargen) {
				xinc=-(xvel*deltaTime);
			}
			//Si esta a la derecha
			else if ( (path.getX(1)*Mapa.TILE_SIZE + Mapa.TILE_SIZE/2) - x > xMargen) { 
				xinc=+(xvel*deltaTime);
			}
			else { 
				//xinc=0;
				x=path.getX(0)*Mapa.TILE_SIZE + Mapa.TILE_SIZE/2;
			}
			
			
			//Si el jugador esta arriba		
			if( (path.getY(1)*Mapa.TILE_SIZE + Mapa.TILE_SIZE/2) - y < -yMargen) { 
				yinc=-(yvel*deltaTime);
			}
			//Si esta abajo
			else if ( (path.getY(1)*Mapa.TILE_SIZE + Mapa.TILE_SIZE/2) - y > yMargen) { 
				yinc=+(yvel*deltaTime);
			}
			else { 
				//yinc=0;			
				y=path.getY(0)*Mapa.TILE_SIZE + Mapa.TILE_SIZE/2;
			}		
			}
		}
	}
}
